import os
import datetime
from dotenv import load_dotenv
from google.adk.agents import Agent
from google.adk.models.lite_llm import LiteLlm
from google.adk.tools import BaseTool, ToolContext, FunctionTool
from contextlib import AsyncExitStack
from google.adk.agents.llm_agent import LlmAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, SseServerParams
# 本地天气API导入
try:
    from .weather_api import get_weather_info
except ImportError:
    # 当作独立脚本运行时
    from weather_api import get_weather_info


# 转换为ADK工具格式
local_weather = FunctionTool(get_weather_info)


# 加载环境变量
load_dotenv()

# 聚合MCP服务Token
DEFAULT_JUHE_MCP_TOKEN = "vu6DADEa78hTp7YehbUidycIOWxk2VKH9ZvfBHLaJ9UHzW"
JUHE_MCP_TOKEN = os.environ.get("JUHE_MCP_TOKEN", DEFAULT_JUHE_MCP_TOKEN)
JUHE_MCP_SSE_URL = f"https://mcp.juhe.cn/sse?token={JUHE_MCP_TOKEN}"

# API密钥设置
DEFAULT_DASHSCOPE_API_KEY = "sk-f227634bb56*************************232"  # 请替换为您的实际密钥
DASHSCOPE_API_KEY = os.environ.get("DASHSCOPE_API_KEY", DEFAULT_DASHSCOPE_API_KEY)

async def create_agent():
  """从 MCP 服务器获取工具。"""
  common_exit_stack = AsyncExitStack()

  # 移除本地MCP工具，只使用远程MCP工具
  remote_tools, _ = await MCPToolset.from_server(
      connection_params=SseServerParams(
          # 重要提示！确保这是你的远程 MCP 服务器路径
          url=JUHE_MCP_SSE_URL
      ),
      async_exit_stack=common_exit_stack
  )

  agent = LlmAgent(
      model=LiteLlm(
                model="openai/qwen-turbo",
                api_key=DASHSCOPE_API_KEY,
                api_base="https://dashscope.aliyuncs.com/compatible-mode/v1"
            ),
      name='enterprise_assistant',
      instruction=(
          """
            你是一个功能强大的智能助手，集成了多种工具来提供天气、新闻和空气质量信息。

            可用工具:
            1. local_weather - 通过本地API查询指定城市的天气信息，参数: {"city": "城市名称"}
            2. mcp_weather - 通过MCP服务查询指定城市的天气信息，参数: {"city": "城市名称"}
            3. mcp_news_list - 通过MCP服务获取指定类型的新闻列表，参数: {"type": "新闻类型", "page": 页码, "page_size": 每页新闻数量}
            新闻类型可选值: top(头条), guonei(国内), guoji(国际), yule(娱乐), tiyu(体育), junshi(军事), keji(科技), caijing(财经), youxi(游戏), qiche(汽车), jiankang(健康)
            4. mcp_news_content - 通过MCP服务获取指定ID的新闻详细内容，参数: {"uniquekey": "新闻ID"}
            5. mcp_air_quality - 通过MCP服务查询指定城市的空气质量信息，参数: {"city": "城市名称"}
            
            使用指南:
            
            1. 当用户询问天气时:
            - 优先使用mcp_weather工具，如果失败则使用local_weather工具
            - 参数格式: {"city": "城市名称"}，例如 {"city": "北京"}
            
            2. 当用户询问新闻时:
            - 先使用mcp_news_list工具获取新闻列表
            - 参数格式: {"type": "新闻类型", "page": 页码, "page_size": 每页新闻数量}
            - 新闻类型默认为"top"(头条)，也可以是"guonei"(国内)、"guoji"(国际)等
            - 如果用户想了解某条新闻的详情，使用mcp_news_content工具
            - 参数格式: {"uniquekey": "新闻ID"}
            
            3. 当用户询问空气质量时:
            - 使用mcp_air_quality工具
            - 参数格式: {"city": "城市名称"}
            
            其他注意事项:
            - (1) 如果MCP工具调用失败，尝试使用本地工具
            - (2) 对用户请求进行准确理解，提取关键信息（如城市名、新闻类型等）
            - (3) 提供友好、简洁的回答
            - (4) 如遇工具调用错误，向用户解释并提供替代方案
            - (5) 不要编造不存在的工具功能
        """
      ),
      tools=[
        *remote_tools,
        local_weather
      ],
  )
  return agent, common_exit_stack


root_agent = create_agent()


